package com.tdk.bts.action;

import java.sql.Date;
import java.sql.Time;
import java.text.SimpleDateFormat;
import java.util.List;

import com.tdk.bts.constants.Constants;
import com.tdk.bts.entity.BookInfo;
import com.tdk.bts.entity.FilmScreen;
import com.tdk.bts.entity.Theater;
import com.tdk.bts.factory.ObjectFactory;
import com.tdk.bts.service.BookInfoService;
import com.tdk.bts.service.FilmScreenService;
import com.tdk.bts.service.TheaterService;
import com.tdk.bts.util.Page;
import com.tdk.bts.util.Request;
import com.tdk.bts.vo.FilmScreenVO;

public class FilmScreenAction {
	
	/**
	 * 根据电影id查询所有可用放映日期 请求参数: filmId 电影的id 响应数据： List<String>类型的days：
	 * 时间应该是yyyy-MM-dd格式的字符串， 只能包含大于当前时间10分钟前的时间 例如：当前时间是16:29:41
	 * 那么应该查询放映时间在今天16:39:41之后的电影
	 */
	public void findDaysByFilmId(Request request) throws Exception {
		// 工厂加载代理类对象
		FilmScreenService service = (FilmScreenService) ObjectFactory
				.getObject("filmScreenService");

		List<String> days = service.findDaysByFilmId(Integer.parseInt(request
				.getParameter("filmId")));
		
		request.setAttribute("days", days);
	}

	/**
	 * 根据放映日期查询所有场次 请求参数 day 放映日期 (yyyy-MM-dd格式)与filmId 电影的id
	 * 响应数据：List<FilmScreen> 类型的screens: 满足条件的所有场次 只能包含大于当前时间10分钟前的所有场次
	 * 例如：当前时间是16:29:41 那么应该查询放映时间在今天16:19:41之后的电影
	 */
	public void findScreensByStartDay(Request request) throws Exception {
		FilmScreenService service = (FilmScreenService) ObjectFactory
				.getObject("filmScreenService");
		String day = request.getParameter("day");
		System.out.println("将要获取的日期为："+day);
		List<FilmScreen> screens = service.findFilmScreenByDayAndFilmId(day,Integer.parseInt(request
				.getParameter("filmId")));
		
		request.setAttribute("screens", screens);
	}

	/**
	 * 根据场次id查询放映厅和预定信息 请求参数 screenId 场次id 响应数据：Theater 类型的theater: 场次对应的放映厅
	 * List<BookInfo> 类型的 bookInfos 场次对应的预定信息
	 */
	public void findTheaterAndBookInfoByScreenId(Request request)
			throws Exception {
		TheaterService theaterService = (TheaterService) ObjectFactory.getObject("theaterServiceProxy");
		BookInfoService bookInfoService = (BookInfoService)ObjectFactory.getObject("bookInfoServiceProxy");
		int id = Integer.parseInt(request.getParameter("screenId"));
		Theater theater = theaterService.findTheaterByScreenId(id);
		List<BookInfo> list = bookInfoService.findBookInfoByScreenId(id);
		request.setAttribute("theater", theater);
		request.setAttribute("bookInfos",list);
	}

	/**两个任务：
	 * 1.根据电影id 查询场次信息 请求参数 pageNo 查询页数 filmId 电影id 响应数据 Page<FilmScreen>
	 * 2.根据电影id查询总场次数量，目的是为了统计总页数
	 * 类型的data
	 */
	public void findScreensByFilmId(Request request) throws Exception {
		FilmScreenService service = (FilmScreenService) ObjectFactory
				.getObject("filmScreenService");
		
		List<FilmScreenVO> list=service.findScreensByFilmIdAndPageNo(request);
		int pageNo = Integer.parseInt(request.getParameter("pageNo"));
		int total=service.findScreensCountsByFilmId(request);

		request.setAttribute("data", new Page<FilmScreenVO>(pageNo, Constants.PAGE_SIZE, list, total));
	}

	/**
	 * 根据电影id 删除场次信息 请求参数 id表示场次id
	 * 
	 */
	public void deleteFilmScreen(Request req) throws Exception {
		FilmScreenService service = (FilmScreenService) ObjectFactory
				.getObject("filmScreenService");
		service.deleteScreen(Integer.parseInt(req.getParameter("id")));
	}

	/**
	 * 添加一个放映室(名称不能重复) 请求参数 name startDay time theaterId filmId
	 */
	public void addScreen(Request req) throws Exception {
		//System.out.println(request.getParameter("filmId"));
		FilmScreenService service = (FilmScreenService) ObjectFactory
				.getObject("filmScreenService");
		FilmScreen fs = new FilmScreen();
		fs.setFilmId(Integer.parseInt(req.getParameter("filmId")));
		fs.setName(req.getParameter("name"));
		SimpleDateFormat f = new SimpleDateFormat("yyyy-MM-dd");
		fs.setStartDay(f.parse(req.getParameter("startDay")));
		//把字符串型 的时间转为Time
		fs.setTime(req.getParameter("time"));
		fs.setTheaterId(Integer.parseInt(req.getParameter("theaterId")));
		service.addScreen(fs);
	}

}
